/********
 * 相关说明：
 * 参数说明：选股条件中如果超过9999999999和-9999999999，则认为是无穷大和无穷小，因为工商银行整体市值2万亿。
 * ********/


var result_code_list = [];//记录每次查询返回的ts_code_list
var dic_condtions_list = [];//记录条件选股的条件


/***********************
 *根据条件选股
 ***********************/
function query_with_conditions() {
    //看看是否存在选股条件
    var key_length = Object.keys(show_selected_condition_list);
    if (key_length.length == 0) {
        $("#btn_query_result").hide();
        $("#div_query_result").removeClass("show");
        alert("请选择选股条件");
        return;
    }

    //获取交易日期，如果未选择，
    var trade_date = '';
    if ($("#date_trade_date")[0].value.trim() == "") {
        //默认数据库中最大交易日期数据,下面为获取本地时间
        // date = new Date();
        // year1 = date.getFullYear();
        // month1 = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
        // day1 = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
        // trade_date = year1.toString() + month1.toString() + day1.toString();//格式化成YYYYMMDD格式
    } else {
        trade_date = $("#date_trade_date")[0].value.trim();
        trade_date = trade_date.replace(RegExp("-", "g"), '')//去除字符串中的”-“
    }

    // alert(dic_conditions.operation_pct_chg)
    $.ajax({
        url: "./",
        type: "GET",
        data: {
            cmd_class: "query",
            command: "conditions",
            trade_date: trade_date,
            data: JSON.stringify(selected_condition_list)
        },//cmd_class表示返回命令类别，command表示具体返回的命令，提高判断语句效率
        // data: {cmd_class: "query", command: "query_with_conditions", "trade_date":trade_date,'data': dic_condtions_list},
        success: function (callback) {
            var data = eval(callback);

            $("#div_showdata").empty();

            $("#div_showdata").append("<div class='text-center'>共" + data[0].length + "支股票符合条件</div>");

            $("#div_showdata").append("<div id='ul_list' class='container'></div>");
            additem = $("#ul_list");

            for (i = 0; i < data[0].length; ++i) {
                additem.append("<li class='float-left' style='width: 150px'><input type='checkbox'/>&nbsp;<a href='#div_show_one_stock_detail' onclick='show_one_stock_detail(this)'>" + data[0][i].trim() + ":" + data[1][i].trim() + "</a></li>");
            }


            if (data[0].length > 0) {
                $("#div_add_attention_btn").empty()
                $("#div_add_attention_btn").append("<hr style='background-color: #dedee2;height: 2px;border: none;'>")

                $("#div_add_attention_btn").append("<div style='text-align: center'><button class='btn btn-secondary' onclick='select_all_checked_eligible_stock()'>关注选中股票</button></div>");

                // $("#btn_query_result").show();
                // $("#div_query_result").addClass("show");
            } else {
                // $("#btn_query_result").hide();
                // $("#div_query_result").removeClass("show");
            }
            //记录查询返回结果code_list
            result_code_list = data[0];

        },
        error: function (e) {
            alert('按条件查询股票失败');

        }

    })


}


/*
将选中需要关注的股票存入数据库
 */
function select_all_checked_eligible_stock() {
    //查询div_showdata中所有checkbox
    stock_selected = $("#div_showdata input[type='checkbox']");
    attention_code_list = [];
    for (i = 0; i < stock_selected.length; i++) {
        if (stock_selected[i].checked) {
            var one = stock_selected[i].nextElementSibling || stock_selected[i].nextSibling;//查找checkbox的兄弟节点
            str = one.innerHTML;
            code = str.split(':')[0];
            stockname = str.split(':')[1];
            attention_code_list.push(code);//将所有选中股票代码存入列表中，发给数据库存储
        }
    }
    if (attention_code_list.length == 0) {
        alert('请选择需要关注的股票！！！');
        return;
    }


    //获取当前选股策略
    var strategy = '';
    for (var key in show_selected_condition_list) {
        strategy = strategy + key + ':' + show_selected_condition_list[key] + ',';
    }

    strategy = prompt('请确认选股策略',strategy);


    $.ajax({
        url: "./",
        type: "GET",
        data: {
            cmd_class: "attention",
            command: "add_list_attention",
            ts_code_list: JSON.stringify(attention_code_list),
            strategy: strategy,
        },
        success: function (callback) {

            alert('提交关注股票成功');


        },
        error: function () {
            alert('提交关注股票失败');

        }
    })


}


/*
调用内嵌页面，并传递股票名称和代码
 */
function show_one_stock_detail(a) {
    stockinfo = a.innerHTML;
    var strs = stockinfo.split(":");
    var ts_code = strs[0].trim();
    var name = strs[1].trim();
    query_stock_detail_info(name, ts_code);
}

/**
 * 查询指定股票信息
 * **/
function query_stock_detail_info(stock_name, ts_code) {

    /**
     * 加载show_selected_stock页面,需传入查询的股票名称和ts代码，返回一个页面，直接加载
     * **/


    if (stock_name == '') {
        alert('请确定要查询的股票')
        return
    }
    if (ts_code == '') {
        alert('请确定要查询的股票')
        return
    }

    $.ajax({
        url: "./",
        type: "GET",
        data: {cmd_class: "query", command: "stock_detail_info", stock_name: stock_name, ts_code: ts_code},
        success: function (callback) {
            $("#div_show_one_stock_detail").empty();
            $("#div_show_one_stock_detail").html(callback);

        },
        error: function () {
            alert('查询失败');
        }
    })

}

/***************************************界面操作相关************************************************/
/**
 * 选择选股条件函数和变量
 * **/
var show_selected_condition_list = {}//用于记录显示在页面的条件列表,页面全局变量,json格式
var selected_condition_list = {};//用于记录被选中条件域和值列表，页面全局变量


//某一个被选中条件的值存储结构体，使用方式  var x = new _one_selected_condition()
function one_selected_condition() {
    this.query_field = '';//具体查询什么字段，例如市盈率，资金总流入字段等
    //字段的值，后台按值1<field<=值2的方式查询，或者如连续涨跌，值1为涨或者跌，即up或者down，值2为具体天数。这个要和后台对应
    this.field_value1 = '';//字段的第一个值，
    this.field_value2 = '';//字段的第二个值

}

//TODO：字典：one_selected_condition中query_field的字典json，和后台一一对应,html添加了新条件，必须在此一一对应
var dic_fieldname_to_DBfield = {
    "交易时间": "trade_date",
    "流动市值": "circ_mv",
    "市盈率": "pe_ttm",
    "换手率": "turnover_rate_f",
    "当日涨幅": "pct_chg",
    "总流入资金": "net_mf_amount",
    "主力净流入": "main_in",
    "主力换手占比": "main_turnover_rate",
    "连续涨跌": "continuous_up_or_down",
    "连续资金流入": "continuous_in_or_out",
    "连续换手率": "continuous_turnover_rate",
}

/**
 * 主要类型被单击后的操作
 * ***/
//选项列表中所有属性为button的input被单击时
$("#selectList dd input:button").click(function () {
    function optional_condition_value(field, value1, value2) {
        var symbol = '';
        var frontstr = '';
        var behindstr = '';
        var units = '';


        if (field == '流动市值' | field == '总流入资金' | field == '当日涨幅') {
            units = "万元";
        }
        if (field == '市盈率' | field == '换手率' | field == '当日涨幅' | field == '主力换手占比') {
            units = "%"
        }

        if (value1 == '' & value2 != '') {
            return "不大于" + value2 + units;
        } else if (value1 != '' & value2 == '') {
            return "不小于" + value1 + units;
        } else {
            return value1 + units + "-" + value2 + units;
        }


    }

    // alert($(this).parent().children("input:text:eq(1)").val());//获取当前button父节点中序列为1（从0开始）的type为text的input元素的值
    var textlist = $(this).siblings(":text");
    var field1 = $(this).parent().parent().siblings("dt").text();
    var value1 = textlist[0].value;
    var value2 = textlist[1].value;
    if (value1 == '' & value2 == '') {
        alert("请输入'" + field1 + "'的查询范围");
        return;
    }
    //去处所在选项的radio的check
    var siblingsRadio = $(this).parent().siblings().children("input:radio");
    for (var i = 0; i < siblingsRadio.length; i++) {
        siblingsRadio[i].checked = false;
    }

    var conditon = optional_condition_value(field1, value1, value2);
    //delete show_selected_condition_list[field1];//先删除以前的条件
    show_selected_condition_list[field1] = conditon;
    add_selected_condition_list(this);
    show_selected_condition(show_selected_condition_list);

    //清除text内容
    textlist[0].value = '';
    textlist[1].value = '';


})

//选项列表中所有属性为radio的input被单击时
$("#selectList dd input:radio").click(function () {
    // alert($(this).next().text());//获取当前radio相邻的a节点
    // 首先将本dd下面的radio的check全部false，然后自身check为true
    var siblingsRadio = $(this).parent().siblings().children("input:radio");
    for (var i = 0; i < siblingsRadio.length; i++) {
        siblingsRadio[i].checked = false;
    }

    $(this).checked = true;

    add_show_conditionlist(this);
    add_selected_condition_list(this);

    // alert($(this).tagName);//这样写会显示无定义，应该this.tagName
//
})

//选项列表中所有a被单击时
$("#selectList dd a").click(function () {
    // alert($(this).parent().children("input:text:eq(1)").val());//获取当前button父节点中序列为1（从0开始）的type为text的input元素的值
    var siblingsA = $(this).parent().siblings().children("input:radio");
    for (var i = 0; i < siblingsA.length; i++) {
        siblingsA[i].checked = false;
    }
    var sibling_raido = $(this).siblings();
    if (sibling_raido.length > 0) {//如果不是无限节点
        sibling_raido[0].checked = true;//TODO:不知道为什么非要这么写，直接jqeury设置值就是不显示。
    }
    add_show_conditionlist(this);
    add_selected_condition_list(this);
    // alert(this.tagName);//this是JavaScript对象,$(this)是将JavaScript的对象转化成JQuery对象,入如果单纯使用this可以直接读取tagName，而jquery会显示tagName无定义
})

//单击某个已选条件，将其从条件列表中删除
function delete_show_condition(e) {
    // alert(e.innerText);
    var field = e.innerText.split(":")[0];
    delete show_selected_condition_list[field];
    show_selected_condition(show_selected_condition_list);
    //还需删除相应radio选项
    //alert($("dt:contains("+field+")").text());
    var delete_raido_check = $("dt:contains(" + field + ")").next().find(":radio");
    for (var i = 0,
             size = delete_raido_check.length; i < size; i++) {

        delete_raido_check[i].checked = false;
    }
    //删除在具体条件列表中的值
    delete selected_condition_list[field];
}

//单击删除全部条件按钮时
$("#div_delete_show_condition").click(function () {
    show_selected_condition_list = {};
    selected_condition_list = {};//条件全部删除
    show_selected_condition(show_selected_condition_list)
    var select_radio = $("#selectList dd input:radio");
    for (var i = 0; i < select_radio.length; i++) {
        select_radio[i].checked = false;
    }

})


//将选中的查询条件放入条件列表,e为被选中的元素，自由条件单独在btn按钮中实现
function add_show_conditionlist(e) {
    var field1 = $(e).parent().parent().siblings("dt").text();//格式必须统一，这样获取的dt值唯一
    //如果是input的radio
    var value1 = '';

    if (e.tagName.toUpperCase() == 'INPUT') {
        if (e.type.toUpperCase() == 'RADIO') {

            value1 = $(e).next().text();//获取后面a中得值
            //delete show_selected_condition_list[field1];//先删除以前的条件
            show_selected_condition_list[field1] = value1//将dt和a中得值存放成 成对存放}
        }
    }
    if (e.tagName.toUpperCase() == 'A') {
        if (e.innerHTML == '不限') {
            delete show_selected_condition_list[field1];//删除以前的条件


        } else {
            value1 = $(e).text();
            //delete show_selected_condition_list[field1];//先删除以前的条件
            show_selected_condition_list[field1] = value1//将dt和a中得值存放成 成对存放}
        }
    }
    show_selected_condition(show_selected_condition_list)
}

function add_selected_condition_list(e) {
    var field1 = $(e).parent().parent().siblings("dt").text();//格式必须统一，这样获取的dt值唯一
    //如果是input的radio
    var query_field = dic_fieldname_to_DBfield[field1];
    var minValue = '';
    var maxValue = '';

    if (e.tagName.toUpperCase() == 'INPUT') {
        if (e.type.toUpperCase() == 'RADIO') {

            var select_a = $(e).next();
            minValue = select_a.attr("values1");
            maxValue = select_a.attr("values2");


            var one_selected_json = new one_selected_condition();
            one_selected_json.query_field = query_field;
            one_selected_json.field_value1 = minValue;
            one_selected_json.field_value2 = maxValue;
            //加入到条件列表中
            selected_condition_list[field1] = one_selected_json;
            // console.log(selected_condition_list[field1]);
        }
        if (e.type.toUpperCase() == 'BUTTON') {
            var textlist = $(e).siblings(":text");
            minValue = textlist[0].value;
            maxValue = textlist[1].value;
            if (minValue.trim() == '') {
                minValue = '-9999999999'
            }//默认为空则是负无穷
            if (maxValue.trim() == '') {
                maxValue = '9999999999'
            }//如果为空，默认是正无穷

            var one_selected_json = new one_selected_condition();
            one_selected_json.query_field = query_field;
            one_selected_json.field_value1 = minValue;
            one_selected_json.field_value2 = maxValue;
            //加入到条件列表中
            selected_condition_list[field1] = one_selected_json;
            console.log(selected_condition_list[field1]);
        }
    }
    if (e.tagName.toUpperCase() == 'A') {
        if (e.innerHTML == '不限') {
            delete selected_condition_list[field1];//删除以前的条件
        } else {
            minValue = e.getAttribute("values1");
            maxValue = e.getAttribute("values2");


            var one_selected_json = new one_selected_condition();
            one_selected_json.query_field = query_field;
            one_selected_json.field_value1 = minValue;
            one_selected_json.field_value2 = maxValue;
            //加入到条件列表中
            selected_condition_list[field1] = one_selected_json;
            // console.log(selected_condition_list[field1]);

        }
    }

}

//显示条件列表
function show_selected_condition(condition_list) {
    var infor = '';
    var key1 = '';
    var value1 = '';

    var selected_field = Object.keys(condition_list);
    for (var i = 0,
             size = selected_field.length; i < size; i++) {
        key1 = selected_field[i]
        value1 = condition_list[key1]
        infor += '<div class=\"selectedInfor selectedShow\" onclick="delete_show_condition(this)"><span>' + key1 + ':</span><label>' + value1 + '</label><em></em></div>';
    }
    $("#div_show_select_condition_list").html(infor);
}

